#include<iostream>
#include<vector>
#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<unistd.h>

//进程切换
int main()
{
    printf("这是进程的开始\n");
    //execl("/usr/bin/ls", "ls", NULL);           //最后面要加NULL
    //execl("/usr/bin/ls", "ls", "-l", "-a", NULL);
    execl("/usr/bin/ls", "ls", "--color=auto", "-l", "-a", NULL);
    //int res = execl("/usr/bin/lssdsdxsx", "lsxsaxsd", "--color=auto", "-l", "-a", NULL);
    //printf("%d\n", res);
    //execl("/usr/bin/top", "top", NULL);
    //printf("这是进程的结束\n");

    return 0;
}

////进程等待
//typedef void (*handlers)();      //后面不需要加重命名
//std::vector<handlers> v;
//
//void func1()
//{
//    printf("任务1\n");
//}
//
//void func2()
//{
//    printf("任务2\n");
//}
//
//void load()
//{
//    v.push_back(func1);
//    v.push_back(func2);
//}
//
//int main()
//{
//    pid_t id = fork();
//    if(id < 0)
//    {
//        perror("fork");
//    }
//    else if(id == 0)
//    {
//        //子进程
//       int cnt = 5; 
//       while(--cnt)
//       {
//           printf("子进程%d，pid = %d, ppid = %d\n", cnt, getpid(), getppid());
//           sleep(1);
//           
//       }
//       //int i = 10;
//       //i /= 0;
//    }
//    else
//    {
//        //父进程
//        printf("父进程，pid = %d, ppid = %d\n", getpid(), getppid());
//        
//        int status = 0;
//        int quit = 0;
//        //pid_t res = waitpid(id, &status, WNOHANG);
//        
//
//        while(!quit)
//        {
//            pid_t res = waitpid(id, &status, WNOHANG);
//            if(res > 0)
//            {
//                printf("子进程退出成功:%d\n", res);
//                quit = 1;
//            }
//            else if(res == 0)
//            {
//                printf("子进程还未退出，先做其他事情？\n");
//                if(v.empty())   //为空时才执行，不是不为空才执行
//                    load();
//                for(auto iter : v)      //g++编译器版本过低会编译不过去
//                {
//                    iter();
//                }
//                sleep(1);
//            }
//            else 
//            {
//                printf("子进程退出异常\n");
//                quit = 1;
//            }
//        }
//
//        //if(WIFEXITED(status))
//        //{
//        //    printf("子进程正常退出，退出码：%d\n", WEXITSTATUS(status));
//        //}
//        //else
//        //{
//        //    printf("子进程退出异常，%d", WIFEXITED(status));
//        //}
//        
//    }
//
//    return 0;
//}
